package main;

import java.util.HashMap;
import java.util.Map;

import main.Neuron.Input;

public class BackPropagationBackup {

	NeuralNetwork network;

	Map<Neuron, Double> errors;

	public BackPropagationBackup(NeuralNetwork network) {
		this.network = network;
	}

//	public void addData(Data data, double learningRate){
//		network.reset();
//		errors = new HashMap<Neuron, Double>();
//
//		for (InputNeuron n: network.inputNeurons){
//			n.setValue(data.ins.get(n));
//			System.out.print(data.ins.get(n)+", ");
//		}
//		System.out.println();
//
//		for (Neuron n: network.outputNeurons){
//			double val = n.getValue();
//
//			double expected = data.outs.get(n);
//			//TODO not sigmoid, so error should be, no ?
//			double error = (expected-val);
//			//double error = val * (1-val) * (expected-val);
//			System.out.println("val - " +val + " net - " + n.getNet() + " expected - " + expected+ " error - " + error);
//			errors.put(n, error);
//		}
//
//		for (Neuron n: network.hiddenNeurons){
//			double val = n.getValue();
//			double error = 0;
//			for (Neuron n1: n.outs){
//				double w = n1.getWeight(n);
//				double n1err = errors.get(n1);
//				error = error + w*n1err;
//			}
//			error = error * val * (1-val);
//			errors.put(n, error);
//		}
//
//		for (Neuron n: network.hiddenNeurons){
//			for (Input n1: n.ins){
//				n1.setWeight(n1.getWeight() + n1.getNeuron().getValue()*learningRate*errors.get(n));
//			}
//		}
//
//		for (Neuron n: network.outputNeurons){
//			for (Input n1: n.ins){
//				n1.setWeight(n1.getWeight() + n1.getNeuron().getValue()*learningRate*errors.get(n));
//			}
//		}
//
//	}
//
//	public static class Data{
//		Map<Neuron, Double> outs;
//		Map<Neuron, Double> ins;
//
//		public Data(Map<Neuron, Double> ins, Map<Neuron, Double> outs) {
//			this.outs = outs;
//			this.ins = ins;
//		}
//	}
//
//	public Neuron testForMaxOut(Data data) {
//		network.reset();
//
//		double max = Double.NEGATIVE_INFINITY;
//		Neuron ans = null;
//
//		for (InputNeuron n: network.inputNeurons){
//			n.setValue(data.ins.get(n));
//		}
//
//		//		System.out.println(data.outs.values().toString());
//
//		for (Neuron n: network.outputNeurons){
//			//			System.out.print(n.getValue() + ", ");
//			if (n.getValue() > max){
//				max = n.getValue();
//				ans = n;
//			}
//		}
//		//		System.out.println();
//		return ans;
//	}
}
